package day10;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * 给你一个数n，每次只能进行减1 或者加2的操作，如果n能整除3，可以进行除3的操作，
 * 能用最少的次数把n进行以上操作后变为1的操作称为n的一个最小变换，比如7->9->3->1，7->6->2->1 
 * 都是n的最小变换，最小变换次数为3，在最小变换中，字典序最小的序列称为完美变换序列。
 * 求n的最小变换次数和完美变换序列
 * @author chenxiaokang
 *
 */
public class Ques1545 {
	
	List<Integer> father;
	List<Integer> son;
	List<Integer> vis;
	int index;
	
	public void write(int target){
		if(target == father.get(0)){
			vis.add(target);
			return;
		}else{
			index++;
			vis.add(target);
			write(father.get(son.indexOf(target)));
		}
	}
	
	public void bfs(int n){
		
		LinkedList<Integer> queue = new LinkedList<Integer>();
		
		queue.push(n);
		int now;
		
		while(!queue.isEmpty()){
			now = queue.poll();
			if(son.contains(1)){
				write(1);
				System.out.print(index+" ");
				Collections.reverse(vis);
				String result = "";
				for(int a : vis){
					result += a+"->";
				}
				System.out.println(result.substring(0, result.length()-2));
				return;
			}
			
			if (now % 3 == 0 ) {
				queue.addLast(now / 3);
				father.add(now);
				son.add(now / 3);
			}
			
				queue.addLast(now - 1);
				father.add(now);
				son.add(now - 1);
			
				queue.addLast(now + 2);
				father.add(now);
				son.add(now + 2);
		}	
	}
	
	public void go(){
		Scanner scan = new Scanner(System.in);
		
		while(scan.hasNext()){
			father = new ArrayList<Integer>();
			son = new ArrayList<Integer>();
			vis = new ArrayList<Integer>();
			int n = scan.nextInt();
			index = 0;
			this.bfs(n);
		}
	}
	
	public static void main(String[] args) {
		new Ques1545().go();
	}
}
